﻿using System.Collections.Generic;
using NhJump.Persistence.Batching;
using NhJump.Persistence.Model;

namespace NhJump.Persistence.Querying.Executable
{
    public interface IExecutableQuery<T, TIdentifier>
        where T : IDomainEntity<TIdentifier>
    {
        IValue<T> SingleOrDefault();

        IValue<T> Unique();

        IEnumerable<T> Enumerate();

        IEnumerable<T> Page(int skip, int take);

        IValue<bool> Exists();

        IValue<int> Count();
    }
}
